/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package blancanieves.back;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author pabloramix
 */
public class Enanito extends Personaje {
    private int prioridadComer;
    private int prioridadTrabajar;
    private Estado estado;
    
    public enum Estado { PARADO, TRABAJANDO, ESPERANDO, COMIENDO};
    
    public Enanito(String nombre) {
        super(nombre, "");
        this.prioridadComer = 100;
        this.prioridadTrabajar = 100;
        this.estado = Estado.PARADO;
    }
    
    public Enanito(String nombre, String foto, int prioridadComer, int prioridadTrabajar) {
        super(nombre, foto);
        this.prioridadComer = formatearPrioridad(prioridadComer);
        this.prioridadTrabajar = formatearPrioridad(prioridadTrabajar);
        this.estado = Estado.PARADO;
    }
    
    public void trabajar () throws InterruptedException {
        
        estado = Estado.TRABAJANDO;
        setProgreso(0);
        
        for (int i = 0; i < 500; i++) {
            
            System.out.println( this + " Heigh-ho, Heigh-ho");
            setProgreso(Math.round(i/5));
            Thread.sleep(obtenerPrioridadReal(prioridadTrabajar));
        } 
    }
    
    public void comer () throws InterruptedException {
        
        estado = Estado.ESPERANDO;
        setProgreso(0);
        
        Comedor c = Comedor.getInstance();
        Sitio s;
        
        System.out.println(this + " Va a comer");
        
        s = c.sentarse();
        
        estado = Estado.COMIENDO;
        
        Thread.sleep(obtenerPrioridadReal(prioridadComer));
        
        s.comer();
        
        Thread.sleep(obtenerPrioridadReal(prioridadComer));
        
        c.levantarse(s); 
    }
    
    @Override 
    public void run () {
        
        flag = true;
        
        while (flag) {
            try {
                
                trabajar();
                comer();
                
            } catch (InterruptedException ex) {
                Logger.getLogger(Enanito.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        System.out.println(this + " Terminando");
        estado = null;
    }
    
    public void setPrioridadComer (int p) {
        prioridadComer = formatearPrioridad(p);
    }
    
    public int getPrioridadComer() {
        return prioridadComer;
    }
    
    public String getPuntosComer() {      
        return prioridadComer + "/100";
    }
    
    public void setPrioridadTrabajar (int p) {
        prioridadTrabajar = formatearPrioridad(p);
    }
    
    public int getPrioridadTrabajar() {
        return prioridadTrabajar;
    }
    
    public String getPuntosTrabajar() {
        return prioridadTrabajar+ "/100";
    }
    
    public Estado getEstado() {
        return estado;
    }
    
    public String toString() {
        return super.toString() + " [" + estado.toString() + "] (trabajar:" + obtenerPrioridadReal(prioridadTrabajar) + "/comer:" + obtenerPrioridadReal(prioridadComer) + ") ";
    }
    
    @Override
    public void terminate () {
        super.terminate();
        estado = Estado.PARADO;
    }
    
}
